﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Resources;
using System.Globalization;
using System.Threading;
using System.Drawing;
using System.Web.SessionState;

namespace spktNhom4DoAnCuoiKy.UserModules
{
    public partial class SessionDetails : System.Web.UI.Page
    {
        string maPhien = null;
        AuctionOnlineDataContext db = new AuctionOnlineDataContext();
        PhienDauGia sd = null;
        ResourceManager rm;


        string FomatCurrency(double amount)
        {
            NumberFormatInfo nfi = new NumberFormatInfo();
            nfi.CurrencySymbol = "";
            nfi.CurrencyDecimalDigits = 2;
            nfi.CurrencyDecimalSeparator = ".";
            nfi.CurrencyGroupSeparator = ",";

            return String.Format(nfi, "{0:C0}", amount);
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            //kiểm tra quyền đấu giá 
            //nếu đc đấu giá mode = 0; else mode = 1
            
          //  SelectMode(0);
            if (!IsPostBack)
            {
                
                //Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
                txtGiaDau.Attributes.Add("onkeypress", "return clickButton(event,'" + btnDatGia.ClientID + "')");
                ddlQuocGia.DataValueField = "MaQuocGia";
                ddlQuocGia.DataTextField = "TenQuocGia";
                ddlQuocGia.DataSource = db.PhiVanChuyenQuocGias.Select(x => new { x.MaQuocGia, x.TenQuocGia, x.PhanTramPhiVanChuyen }).ToList();
                ddlQuocGia.DataBind();
                ddlQuocGia.SelectedIndex = 0;
                maPhien = Request.QueryString["SessionId"];
                maPhien = "P00001";
                sd = db.PhienDauGias.Where(x => x.MaPhien == maPhien).FirstOrDefault();
                if (sd != null)
                {
                    Session.setCurrentAuctionSession(sd);
                    //thong tin san pham
                    lblMoTa.Text = sd.SanPham.MoTa;
                    lblNguonGoc.Text = sd.SanPham.MoTaNguonGoc;
                    lblTinhTrangSanPham.Text = sd.SanPham.TinhTrangSanPham1.MoTaTinhTrang;
                    lblSoLuong.Text = sd.SanPham.SoLuong.ToString();

                    //show data
                    lblTenSanPham.Text = sd.SanPham.TenSanPham;
                    lblNhomPhien.Text = Session.getResourceManager().GetString(sd.NhomLoaiPhien.NhomPhien.TenNhomPhien);
                    lblLoaiPhien.Text = Session.getResourceManager().GetString(sd.NhomLoaiPhien.LoaiPhien.TenLoaiPhien);
                    hlNguoiDangTin.Text = sd.TenNguoiDangTin;
                    imgAnhPhien.ImageUrl = "~/" + sd.SanPham.HinhAnh;
                    NumberFormatInfo nfi = new NumberFormatInfo();
                    nfi.CurrencySymbol = "";
                    nfi.CurrencyDecimalDigits = 2;
                    nfi.CurrencyDecimalSeparator = ".";
                    nfi.CurrencyGroupSeparator = ",";
                    
                    lblGiaSan.Text = String.Format(nfi,"{0:C0}", sd.GiaSan);
                    lblGiaHienTai.Text = String.Format(nfi, "{0:C0}", sd.GiaThang);
                    lblBuocGia.Text = String.Format(nfi,"{0:C0}", sd.BuocGia);
                    lblGiaTran.Text = String.Format(nfi,"{0:C0}", sd.GiaTran);
                    txtGiaDau.Text = sd.GiaThang.ToString();
                   

                    txtGiaDau_NumericUpDownExtender.Step = sd.BuocGia.Value+0.0000000001;
                    
                  

                    lblFomatedCurrency.Text = String.Format(nfi, "{0:C}", Math.Round(Double.Parse(txtGiaDau.Text), 3));
                    

                    lblThoiGianKetThuc.Text = sd.ThoiGianKetThucBan.Value.ToString();
                    hlLichSuDauGia.Text = sd.ChiTietPhienDauGias.Count().ToString();
                    lblGiaoHang.Text = db.PhiVanChuyenQuocGias.Where(x => x.MaQuocGia == ddlQuocGia.SelectedValue.ToString()).FirstOrDefault().PhanTramPhiVanChuyen.ToString() + "%";
                    lblGiaoDen.Text = ddlQuocGia.SelectedItem.Text;

                    FillChiTietDauGia(sd.MaPhien);
                    if (sd.ThoiGianKetThucBan > DateTime.Now)
                    {

                        
                        Session["timeout"] = sd.ThoiGianKetThucBan.Value;
                      
                       Timer1.Enabled = true;

                    }
                    else
                    {
                        lblTinhTrang.Text = "Đã Kết Thúc";
                        lblThoiGianConLai.Text = CounterTimer(0);
                        SelectMode(1);
                        PnNhap.Visible = false;
                        lblThongBao.Text = "Phiên đã kết thúc.";
                        lNguoiThang.Text = "Người Thắng";
                        lblThongBao.ForeColor = Color.Blue;
                        Timer1.Enabled = false;
                        
                    }

                    if (sd.ChiTietPhienDauGias.Count > 0)
                    {
                        string nguoiDauGiaMoiNhat = sd.ChiTietPhienDauGias.Where(x => x.MaPhien == sd.MaPhien).OrderByDescending(x => x.ThoiGianRaGia).FirstOrDefault().NguoiRaGia;
                        hlNguoiRaGiaMoiNhat.Text = nguoiDauGiaMoiNhat;
                    }
                    else
                    {
                        hlNguoiRaGiaMoiNhat.Text = "Chưa có.";
                    }
                    rblHinhThucGiaoHang.DataTextField = "TenHinhThucVanChuyen";
                    rblHinhThucGiaoHang.DataValueField = "MaHinhThucVanChuyen";
                    rblHinhThucGiaoHang.DataSource = sd.HinhThucVanChuyenHoTros.Select(x=>new {MaHinhThucVanChuyen = Session.getResourceManager().GetString(x.MaHinhThucVanChuyen),TenHinhThucVanChuyen =Session.getResourceManager().GetString(x.HinhThucVanChuyen.MoTa)}).ToList();
                    rblHinhThucGiaoHang.DataBind();

                }
               // 
                // Danh sach Quoc gia

                

            }
            lblMoTa.Text = new Random().NextDouble().ToString();
            
        }

        protected void ddlQuocGia_SelectedIndexChanged(object sender, EventArgs e)
        {
            var phi = db.PhiVanChuyenQuocGias.Select(x => new { x.MaQuocGia, x.TenQuocGia, x.PhanTramPhiVanChuyen }).Where(x => x.MaQuocGia == ddlQuocGia.SelectedValue.ToString()).FirstOrDefault();
            if (phi != null)
            {
                PhanTramPhiVanChuyen.Text = String.Format("{0}%", phi.PhanTramPhiVanChuyen);
                lblGiaoHang.Text = db.PhiVanChuyenQuocGias.Where(x => x.MaQuocGia == ddlQuocGia.SelectedValue.ToString()).FirstOrDefault().PhanTramPhiVanChuyen.ToString() + "%";
                lblGiaoDen.Text = ddlQuocGia.SelectedItem.Text;
            }
        }
        string CounterTimer(int TimeLeft)
        {
            int day = (int)Math.Floor(TimeLeft * 1.0 / (60 * 60 * 24));
            int hour = (int)Math.Floor(TimeLeft * 1.0 / 3600) - (day * 24);
            int minute = (int)Math.Floor(TimeLeft * 1.0 / 60) - (day * 24 * 60) - (hour * 60);
            int second = (int)Math.Floor(TimeLeft * 1.0) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60);

            
            string strhour = hour < 10 ? "0" + hour : hour.ToString();
            string strminute = minute < 10 ? "0" + minute : minute.ToString();
            string strsecond = second < 10 ? "0" + second : second.ToString();
            if (TimeLeft == 0) return "Time Out!!";
            TimeLeft = TimeLeft - 1;
            string remain =((day!=0)?day + " Ngày   ":"") + strhour + ":" + strminute + ":" + strsecond;
            
            return remain;



        }

        protected void Timer1_Tick(object sender, EventArgs e)
        {
            if (Session.getCurrentAuctionSession() != null)
            {
                if (Session.IsAuctionSessionChange())
                {
                    PhienDauGia p = db.PhienDauGias.Where(x => x.MaPhien == Session.getCurrentAuctionSession().MaPhien).FirstOrDefault();
                    if (p != null)
                    {
                        Session.setCurrentAuctionSession(p);
                        Session.InformReceivedChange();
                        lblGiaHienTai.Text = FomatCurrency(p.GiaThang.Value);
                        lblThoiGianKetThuc.Text = p.ThoiGianKetThucBan.Value.ToString("dd/MM/yyyy HH:mm:ss");
                        hlLichSuDauGia.Text = p.ChiTietPhienDauGias.Count.ToString();
                        FillChiTietDauGia(p.MaPhien);
                        
                    }
                }
                if (DateTime.Compare(DateTime.Now, (DateTime)Session.getCurrentAuctionSession().ThoiGianBatDauBan.Value) < 0)
                {
                    lblTinhTrang.Text = "Sắp bắt đầu";
                    SelectMode(1);
                    lblThongBao.Text = "Phiên sắp bắt đầu.";
                    lblThongBao.ForeColor = Color.Blue;
                    return;
                }
                if (DateTime.Compare(DateTime.Now, (DateTime)Session.getCurrentAuctionSession().ThoiGianKetThucBan.Value) < 0)
                {
                    int TimeLeft = (Int32)((DateTime)Session.getCurrentAuctionSession().ThoiGianKetThucBan.Value - DateTime.Now).TotalSeconds;
                    lblThoiGianConLai.Text = CounterTimer(TimeLeft);
                    lblTinhTrang.Text = "Đang diễn ra.";
                }
                else
                {

                    lblThoiGianConLai.Text = CounterTimer(0);
                    lblTinhTrang.Text = "Đã Kết Thúc";
                    //xử lý thông phiên
                    //SelectMode(1);
                    
                    //xử lý phiên kết thúc.
                 //   Session.SendMessages("Bạn đã thắng phiên", "");
                    Response.Redirect(Request.RawUrl);
                    return;

                }
            }

            

        }
        protected bool IsGiaDauHopLe(double giadau,PhienDauGia sd,ref Color WaringLevel,ref string Info)
        {

            //kiem tra giá sàn.
             if (giadau<= sd.GiaThang) 
                {
                    WaringLevel = Color.Red;
                    Info =  "Giá Không hợp lệ. Giá Phải lớn hơn giá hiện tại.";
                  return false;
                } else if (giadau > sd.GiaTran)
                {
                   WaringLevel = Color.Red;
                     Info = "Giá Không hợp lệ. Giá phải nhỏ hơn hoặc bằng giá trần. Bạn có thể chọn chức năng mua ngay với giá trần.";
                         return false;
                }
            if (sd.BuocGia>0) // giá tùy ý
            {
                double d = (giadau - sd.GiaSan.Value) / sd.BuocGia.Value;
                if (d != (int)d) { 
                    
               
                WaringLevel = Color.Orange;
                Info = String.Format("Giá Không hợp lệ. Giá phải tăng theo bước giá. Ví dụ {0},{1},{2}...",sd.GiaSan+sd.BuocGia,sd.GiaSan+2*sd.BuocGia,sd.GiaSan+3*sd.BuocGia);
                return false;
                }
            }
            Info = "Giá hợp lệ.";
            return true;
        }
        protected void txtGiaDau_TextChanged(object sender, EventArgs e)
        {
            if (txtGiaDau.Text != "")
            {
                NumberFormatInfo nfi = new NumberFormatInfo();
                nfi.CurrencySymbol = "";
                nfi.CurrencyDecimalDigits = 2;
                nfi.CurrencyDecimalSeparator = ".";
                nfi.CurrencyGroupSeparator = ",";
                double giaDau = Math.Round(Double.Parse(txtGiaDau.Text), 3);
                string info = "";
                Color warninglevel = Color.Red;
                if (IsGiaDauHopLe(giaDau, Session.getCurrentAuctionSession(), ref warninglevel, ref info))
                {
                    SelectMode(0);
                    lblFomatedCurrency.Text = String.Format(nfi, "{0:C}", giaDau);
                    txtGiaDau.Focus();
                }
                else
                {
                    SelectMode(1);
                    lblThongBao.ForeColor = warninglevel;
                    lblThongBao.Text = info;
                    txtGiaDau.Focus();
                }

            }
            else
            {
                txtGiaDau.Text = "0";
                SelectMode(1);
                lblThongBao.ForeColor = Color.Orange;
                lblThongBao.Text = "Vui lòng nhập giá.";
            }
            
        }
        void SelectMode(int mode)
        {
            if (mode == 0)
            {
                PnInfo.Visible = true;
                PnThongBao.Visible = false;
               
            }
            else if (mode == 1)
            {
                PnInfo.Visible = false;
                PnThongBao.Visible = true;
                
            }
            
        }
        void FillChiTietDauGia(string maphien)
        {
            var chitiet = db.ChiTietPhienDauGias.Where(x => x.MaPhien == maphien).OrderByDescending(x => x.ThoiGianRaGia).Take(10).Select(x => new { NguoiRaGia = String.Format("{0}@{1}_{2}", x.NguoiRaGia, x.Server.VietTatTenQuocGia.ToUpper(), x.Server.SoThuTuTram), ThoiGianRaGia = x.ThoiGianRaGia.Value, GiaDaRa = FomatCurrency(x.GiaRa.Value) }).ToList();
            gvChiTietDauGia.DataSource = chitiet;
            gvChiTietDauGia.DataBind();
        }
        protected void btnDatGia_Click(object sender, EventArgs e)
        {
            //kiểm tra giá hợp lệ
            if (txtGiaDau.Text != "")
            {
                double giaDau = Math.Round(Double.Parse(txtGiaDau.Text), 3);
                string info = "";
                Color warninglevel = Color.Red;
                if (IsGiaDauHopLe(giaDau, Session.getCurrentAuctionSession(), ref warninglevel, ref info))
                {
                    //nếu giá hợp lệ

                    SelectMode(1);
                    PhienDauGia sd = db.PhienDauGias.Where(x => x.MaPhien == Session.getCurrentAuctionSession().MaPhien).FirstOrDefault();
                    if (sd != null)
                    {
                        sd.GiaThang = giaDau;
                        //câp nhật chi tiết đấu giá.
                        sd.SoLuotDauGiaHienTai = sd.SoLuotDauGiaHienTai + 1;
                        ChiTietPhienDauGia ls = new ChiTietPhienDauGia();
                        ls.ChiPhietPhienId = db.ChiTietPhienDauGias.GetNewCode("ChiPhietPhienId","");
                        ls.MaPhien = sd.MaPhien;
                        ls.GiaRa = giaDau;
                        ls.NguoiRaGia = "admin";
                        ls.ServerNguoiRaGia = "SV001";
                        ls.ThoiGianRaGia = DateTime.Now;
                        sd.ChiTietPhienDauGias.Add(ls);
                        //thời gian vẫn còn
                        if (DateTime.Compare(sd.ThoiGianKetThucBan.Value, DateTime.Now) >= 0)
                        {
                            if (sd.ThoiGianKetThucBan.Value.Subtract(DateTime.Now).TotalMinutes < 5)
                            {
                                sd.ThoiGianKetThucBan = sd.ThoiGianKetThucBan.Value.AddMinutes(5);
                            }
                        }
                        db.SubmitChanges();
                        //cập nhật lại session;
                        Session.setCurrentAuctionSession(sd);
                        //Thong báo
                        lblThongBao.Text = "Đặt giá thành công.";
                        lblThongBao.ForeColor = Color.Green;
                        lblGiaHienTai.Text = FomatCurrency(giaDau);
                        hlLichSuDauGia.Text = sd.ChiTietPhienDauGias.Count.ToString();
                        if (sd.ChiTietPhienDauGias.Count > 0)
                        {
                            string nguoiDauGiaMoiNhat = sd.ChiTietPhienDauGias.Where(x => x.MaPhien == sd.MaPhien).OrderByDescending(x => x.ThoiGianRaGia).FirstOrDefault().NguoiRaGia;
                            hlNguoiRaGiaMoiNhat.Text = nguoiDauGiaMoiNhat;
                        }
                        else {
                            hlNguoiRaGiaMoiNhat.Text = "Chưa có.";
                        }
                        //cập nhật danh sách chi tiết

                        FillChiTietDauGia(sd.MaPhien);

                        //cập nhật lại cho các session hiện tại
                        Dictionary<string, HttpSessionState> sessionData =
                        (Dictionary<string, HttpSessionState>)Application["ss"];
                        foreach (KeyValuePair<string, HttpSessionState> item in sessionData)
                        {
                            if (item.Value.getCurrentAuctionSession()!=null)
                            {
                                if (item.Value.getCurrentAuctionSession().MaPhien == sd.MaPhien)
                                {
                                    item.Value.InformAuctionSessionChange();
                                }
                            }
                            
                        }

                    }
                }
                else
                {
                    SelectMode(1);
                    lblThongBao.ForeColor = warninglevel;
                    lblThongBao.Text = info;
                    return;
                }
            }
            else
            {
                SelectMode(1);
                lblThongBao.ForeColor = Color.Orange;
                lblThongBao.Text = "Bạn chưa đặt giá";
                return;
            }
        }

        protected void btnChuyen_Click(object sender, EventArgs e)
        {
            //Dictionary<string, HttpSessionState> sessionData =
            //      (Dictionary<string, HttpSessionState>)Application["ss"];
            //foreach (KeyValuePair<string, HttpSessionState> item in sessionData)
            //{
            //    if (item.Value.getCurrentAuctionSession() != null)
            //    {

            //        item.Value.SendMessages("Thang", "");
                    
            //    }

            //}
            Session["tung"] = "admin@VN_01";
        }

        protected void GridView1_DataBound(object sender, EventArgs e)
        {
            
        }

        protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //dòng đầu
                if (gvChiTietDauGia.PageIndex * gvChiTietDauGia.PageSize + e.Row.RowIndex == 0)
                {
                    e.Row.Font.Bold = true;
            
                }
                Label label = (Label)e.Row.FindControl("STT");
                if (label != null)
                {
                    label.Text = (gvChiTietDauGia.PageIndex * gvChiTietDauGia.PageSize + e.Row.RowIndex + 1).ToString();
                }
            }
        }

     

        protected void Button2_Click(object sender, EventArgs e)
        {

        }

        protected void hlLichSuDauGia_Click(object sender, EventArgs e)
        {
            btnTemp1_ModalPopupExtender.Show();
        }
    }
}